package com.socket;


import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {
	public static final String IP_ADDR = "192.168.19.78";//服务器地址
    public static final int PORT = 12345;//服务器端口号    
    
    private Socket socket = null; 
    private DataInputStream input = null; //读取服务器端数据
    private DataOutputStream out = null; //向服务器端发送数据
    private FileInputStream fis;
    
    public void init() { 
    	System.out.println("客户端启动...");    
        System.out.println("当接收到服务器端字符为 \"OK\" 的时候, 客户端将终止\n");   
        
    	while (true) {   
            try {  
                //创建一个流套接字并将其连接到指定主机上的指定端口号  
                socket = new Socket(IP_ADDR, PORT);    
                    
                //读取服务器端数据    
                input = new DataInputStream(socket.getInputStream());    
                
                //向服务器端发送数据    
                out = new DataOutputStream(socket.getOutputStream());    
//                System.out.print("请输入: \t");    
//                String str = new BufferedReader(new InputStreamReader(System.in)).readLine();    
//                out.writeUTF(str);  
                boolean disposeClientData = this.disposeClientData(out);
                System.out.println("文件发送成功:"+disposeClientData);
                
                
                String ret = input.readUTF();
                System.out.println("服务器端返回过来的是: " + ret);   
                // 如接收到 "OK" 则断开连接    
                if ("OK".equals(ret)) {    
                    System.out.println("客户端将关闭连接");    
                    Thread.sleep(500);    
                    break;    
                }
                
                out.close();
                input.close();
            } catch (Exception e) {  
            	//e.printStackTrace();
                System.out.println("客户端异常:" + e.getMessage());   
            } finally {
                if (socket != null) {  
                    try {  
                        socket.close();  
                    } catch (IOException e) {  
                        socket = null;   
                        System.out.println("客户端 finally 异常:" + e.getMessage());   
                    }  
                }  
            }  
        }
    }
   
    /**
     * 向服务端发送数据
     * @return
     */
    public boolean disposeClientData(DataOutputStream out) {
    	try {
	    	//向服务端传送文件
	        File file = new File("E:\\file\\a\\360安全卫士_9.6正式版.exe");
	        String filePath = "c:/";
	        
			fis = new FileInputStream(file);
			
	        //文件名,长度,位置
	        out.writeUTF(file.getName());
	        out.flush();
	        out.writeUTF(filePath);
	        out.flush();
	        out.writeLong(file.length());
	        out.flush();
	        
	        //传输文件
	        byte[] sendBytes = new byte[1024];
	        int length = 0;
	        while((length = fis.read(sendBytes, 0, sendBytes.length)) > 0){
	        	out.write(sendBytes, 0, length);
	        	out.flush();
	        }
	        fis.close();
	        return true;
        } catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
    	
    }
    
    
    public static void main(String[] args) {    
        
        Client client = new Client();
        client.init();
        
    }    
}
